/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.loja.model.entity.despesa;

import br.com.loja.model.entity.Switchable;
import java.math.BigDecimal;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import br.com.loja.model.entity.conta.Conta;
import br.com.loja.view.swing.model.ColumnTableModel;
import br.com.loja.view.swing.model.FormField;
import br.com.loja.view.swing.model.IgnoreTableModel;
import java.io.Serializable;

/**
 *
 * @author David Luiz
 */
@Entity
@Table(name = "despesa_abstrata")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class DespesaAbstrata implements Switchable, Serializable {

    public static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @ColumnTableModel(label = "Código")
    private Long idDespesa;
    @ColumnTableModel(label = "Descrição")
    private String descricao;
    private BigDecimal valor;
    @ColumnTableModel(label = "Dia vencimento")
    private Integer diaVencimento;
    @FormField(visible = false)
    @OneToOne(cascade = {CascadeType.ALL})
    private Conta conta;

    @FormField(visible = false)
    @IgnoreTableModel
    private boolean dead;

    public DespesaAbstrata() {
        super();
    }

    /**
     * @return the idDespesa
     */
    public Long getIdDespesa() {
        return idDespesa;
    }

    /**
     * @param idDespesa the idDespesa to set
     */
    public void setIdDespesa(Long idDespesa) {
        this.idDespesa = idDespesa;
    }

    /**
     * @return the descricao
     */
    public String getDescricao() {
        return descricao;
    }

    /**
     * @param descricao the descricao to set
     */
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    /**
     * @return the valor
     */
    public BigDecimal getValor() {
        return valor;
    }

    /**
     * @param valor the valor to set
     */
    public void setValor(BigDecimal valor) {
        this.valor = valor;
    }

    /**
     * @return the diaVencimento
     */
    public Integer getDiaVencimento() {
        return diaVencimento;
    }

    /**
     * @param diaVencimento the diaVencimento to set
     */
    public void setDiaVencimento(Integer diaVencimento) {
        this.diaVencimento = diaVencimento;
    }

    /**
     * @return the conta
     */
    public Conta getConta() {
        return conta;
    }

    /**
     * @param conta the conta to set
     */
    public void setConta(Conta conta) {
        this.conta = conta;
    }

    @Override
    public boolean isDead() {
        return dead;
    }

    @Override
    public void setDead(boolean dead) {
        this.dead = dead;
    }

}
